package com.dy.design_pattern_study.iterator_patern.dome1;

import com.dy.design_pattern_study.iterator_patern.dome1.impl.ConcreteAggregate;
import com.dy.design_pattern_study.iterator_patern.dome1.impl.ConcreteIterator;
import com.dy.design_pattern_study.iterator_patern.dome1.impl.ConcreteIteratorDesc;

/**
 * @CreateBy zhangdingyi
 * @Date 2023-04-15
 * @Content 迭代器客户端
 * 迭代器（Iterator）模式就是分离了集合对象的遍历行为，抽象出一个迭代器类来负责，
 * 这样既可以做到不暴露集合的内部结构，又可让外部代码透明地访问集合内部的数据。
 *
 * 就是把集合进行遍历，但人家又不知道这个具体集合的内部结构
 *
 * 什么时候使用？
 * 当你需要对聚集有多种方式遍历时，可以考虑用迭代器模式
 * 可以在不需要其集合结构的时候，比如，想要在循环中删除对应的元素，不能直接使用for循环进行删除，需要使用迭代器进行循环删除
 */
public class client {
    public static void main(String[] args) {
        //聚合对象 --模拟公交车买票
        ConcreteAggregate a = new ConcreteAggregate();

        //设置成员
        for (int i = 0; i < 10; i++) {
            a.setItem(i, "A" + (i + 1));
        }

        //Iterator i = new ConcreteIterator(a);//正向迭代
        Iterator i = new ConcreteIteratorDesc(a);//反向迭代

        while (!i.isDone()) {
            System.out.println("请买车票，" + i.currentItem());
            i.next();
        }
    }
}
